
package com.phevos.common.util;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;

public class SqlUtil
{
    private final static int IN_MAX_PARAMETER = 999;

    /**
     * ��ResultSet����л�ȡָ���е���ݣ���ת����String����
     * 
     * @param rs ResultSet���
     * @param column ָ����
     * @throws java.sql.SQLException
     * @return �ӽ���л�ȡ�����
     */
    public static String getValueFromResultSet(ResultSet rs, int column) throws SQLException
    {
        ResultSetMetaData md = rs.getMetaData();
        int type = md.getColumnType(column);
        switch (type)
        {
            case Types.INTEGER:
                return String.valueOf(rs.getInt(column));
            case Types.CHAR:
                return rs.getString(column);
            case Types.DATE:
                return String.valueOf(rs.getTimestamp(column).getTime());
            case Types.DOUBLE:
                return String.valueOf(rs.getDouble(column));
            case Types.VARCHAR:
                return rs.getString(column);
            case Types.NUMERIC:
                return String.valueOf(rs.getDouble(column));
            case Types.DECIMAL:
                return String.valueOf(rs.getDouble(column));
            default:
                throw new SQLException("��֧�ֵ��������:" + type);
        }
    }

    /**
     * ��int�������sql����in�������
     * 
     * @param column String ʹ��in��Ϊ���������
     * @param values int[] in���������
     * @return String ��(in��Ϊ�����sql���
     */
    public static String constructInIntSql(String column, int[] values)
    {
        StringBuffer sqlBuff = new StringBuffer();
        int cnt = 0;
        sqlBuff.append('(');
        sqlBuff.append(column);
        sqlBuff.append(" in (");
        for (int i = 0; i < values.length; i++)
        {
            if (cnt == 0)
            {
                sqlBuff.append(values[i]);
                cnt++;
            }
            else if (cnt < IN_MAX_PARAMETER)
            {
                sqlBuff.append(',');
                sqlBuff.append(values[i]);
                cnt++;
            }
            else
            {
                sqlBuff.append(')');
                sqlBuff.append(" or ");
                sqlBuff.append(column);
                sqlBuff.append(" in (");
                sqlBuff.append(values[i]);
                cnt = 1;
            }
        }
        sqlBuff.append(')');
        sqlBuff.append(')');
        return sqlBuff.toString();
    }

    /**
     * ��String�������sql����in�������
     * 
     * @param column String ʹ��in��Ϊ���������
     * @param values String[] in���������
     * @return String ��(in��Ϊ�����sql���
     */
    public static String constructInStringSql(String column, String[] values)
    {
        StringBuffer sqlBuff = new StringBuffer();
        int cnt = 0;
        sqlBuff.append('(');
        sqlBuff.append(column);
        sqlBuff.append(" in (");
        for (int i = 0; i < values.length; i++)
        {
            if (cnt == 0)
            {
                sqlBuff.append("'").append(values[i]).append("'");
                cnt++;
            }
            else if (cnt < IN_MAX_PARAMETER)
            {
                sqlBuff.append(',');
                sqlBuff.append("'").append(values[i]).append("'");
                cnt++;
            }
            else
            {
                sqlBuff.append(')');
                sqlBuff.append(" or ");
                sqlBuff.append(column);
                sqlBuff.append(" in (");
                sqlBuff.append("'").append(values[i]).append("'");
                cnt = 1;
            }
        }
        sqlBuff.append(')');
        sqlBuff.append(')');
        return sqlBuff.toString();
    }
}
